﻿using Model;
using Model.Auxiliar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace BLL
{
    public class Documento_BLL
    {
        #region singleton
        private static Documento_BLL instance;

        private Documento_BLL() { }

        public static Documento_BLL Instance
        {
            get
            {
                if (instance == null)
                {
                    instance = new Documento_BLL();
                }
                return instance;
            }
        }
        #endregion

        public string NomeTipoDocumento(int id_tipo_doc)
        {
            hrpEntities hrp = new hrpEntities();
            var tipoDocumentos = from tipoDoc in hrp.hrp_tipo_documentos
                                 where tipoDoc.id == id_tipo_doc
                                 select tipoDoc.doc;

            return tipoDocumentos.FirstOrDefault();
        }


        public List<FuncionarioDocumentos> obterDocumentosFuncionario(int id_funcionario)
        {
            hrpEntities hrp = new hrpEntities();
            var result = from doc in hrp.hrp_documentos
                         join tipodoc in hrp.hrp_tipo_documentos on doc.id_doc equals tipodoc.id
                         where doc.id_funcionario == id_funcionario && doc.activo == true
                         select new FuncionarioDocumentos()
                         {
                             Id = doc.id,
                             NumeroDocumento = doc.numero_documento,
                             DataInicio = (DateTime)doc.data_inicio,
                             DataValidade = (DateTime)doc.data_validade,                           
                             Doc = tipodoc.doc,
                             active = (bool)doc.activo,
                             url = doc.foto_doc,
                             id_tipo_doc = tipodoc.id
                         };
            return result.ToList();
        }


        public FuncionarioDocumentos obterDocumentosFuncionarioPorID(int idDoc, int id_funcionario)
        {
            hrpEntities hrp = new hrpEntities();
            var result = from doc in hrp.hrp_documentos
                         join tipodoc in hrp.hrp_tipo_documentos on doc.id_doc equals tipodoc.id
                         where doc.id_funcionario == id_funcionario && doc.id == idDoc
                         select new FuncionarioDocumentos()
                         {
                             Id = doc.id,
                             NumeroDocumento = doc.numero_documento,
                             DataInicio = (DateTime)doc.data_inicio,
                             DataValidade = (DateTime)doc.data_validade,
                             Doc = tipodoc.doc,
                             active = (bool)doc.activo,
                             url = doc.foto_doc,
                             id_tipo_doc = tipodoc.id
                         };
            return result.FirstOrDefault();
        }



        public List<hrp_tipo_documentos> obterDocumentos()
        {
            hrpEntities hrp = new hrpEntities();
            var result = from doc in hrp.hrp_tipo_documentos
                         select doc;
            return result.ToList();
        }



        public string obterNodeIDDocumentosFuncionario(int id_Documento)
        {
            hrpEntities hrp = new hrpEntities();
            return hrp.hrp_documentos.Where(d => d.id == id_Documento).FirstOrDefault().foto_doc;
            //return (int)db.hrp_documentos.Where(d => d.id == id_Documento).FirstOrDefault().foto_doc;
        }


        public int adicionarDocumentoFuncionario(int idcliente, string userid, string ip,
            int id_funcionario, int id_doc, string id_imagemdoc, string numero_doc, DateTime data_validade, DateTime datainicio)
        {
            int result = 0;
            try
            {
                hrpEntities hrp = new hrpEntities();
                hrp_documentos adicionarDocumentoFuncionario = new hrp_documentos();
                adicionarDocumentoFuncionario.id_cliente = idcliente;
                adicionarDocumentoFuncionario.user_id = userid;
                adicionarDocumentoFuncionario.user_ip = ip;
                adicionarDocumentoFuncionario.user_timestamp = DateTime.Now;
                adicionarDocumentoFuncionario.id_funcionario = id_funcionario;
                adicionarDocumentoFuncionario.id_doc = id_doc;
                adicionarDocumentoFuncionario.foto_doc = id_imagemdoc;
                adicionarDocumentoFuncionario.numero_documento = numero_doc;
                adicionarDocumentoFuncionario.data_inicio = datainicio;
                adicionarDocumentoFuncionario.data_validade = data_validade;
                adicionarDocumentoFuncionario.activo = true;

                hrp.hrp_documentos.Add(adicionarDocumentoFuncionario);
                hrp.SaveChanges();

                result = adicionarDocumentoFuncionario.id;
            }
            catch (Exception)
            {
                throw;
            }
            return result;
        }


        public int updateDocumentoFuncionario(int iddoc,int id_cliente, string userid, string ip,
            int id_funcionario, int id_doc, string id_imagemdoc, string numero_doc, DateTime data_validade, DateTime datainicio)
        {
            int result = 0;
            try
            {
                hrpEntities hrp = new hrpEntities();
                hrp_documentos adicionarDocumentoFuncionario = hrp.hrp_documentos.Where(c => c.id == iddoc && c.id_cliente == id_cliente).FirstOrDefault();

               
                adicionarDocumentoFuncionario.user_id = userid;
                adicionarDocumentoFuncionario.user_ip = ip;
                adicionarDocumentoFuncionario.user_timestamp = DateTime.Now;
                adicionarDocumentoFuncionario.id_funcionario = id_funcionario;
                adicionarDocumentoFuncionario.id_doc = id_doc;
                if (id_imagemdoc != "path")
                {
                     adicionarDocumentoFuncionario.foto_doc = id_imagemdoc;
                } 
                adicionarDocumentoFuncionario.numero_documento = numero_doc;
                adicionarDocumentoFuncionario.data_inicio = datainicio;
                adicionarDocumentoFuncionario.data_validade = data_validade;
                adicionarDocumentoFuncionario.activo = true;

               
                hrp.SaveChanges();

                result = adicionarDocumentoFuncionario.id;
            }
            catch (Exception)
            {
                throw;
            }
            return result;
        }

        public void setActivo_InactivoDOC(int id)
        {
            hrpEntities hrp = new hrpEntities();
            hrp_documentos doc = hrp.hrp_documentos.FirstOrDefault(d => d.id == id);
            doc.activo = !doc.activo;
            hrp.SaveChanges();
      
        }
    }
}
